home *** CD-ROM | disk | FTP | other *** search
/ ADA Programming Guide / ADA Programming Guide.iso / ada_lrm / chap01.doc next >
Text File  |  1996-01-30  |  29KB  |  1,190 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6. The following document is a draft  of  the  corresponding  chapter  of  the
  7. version  of  the  Ada  Reference  Manual  produced  in response to the Ansi
  8. Canvass.  It is given a limited circulation  to  Ada  implementers  and  to
  9. other groups contributing comments (according to the conventions defined in
  10. RRM.comments).  This draft should not be referred to in any publication.
  11.  
  12.  
  13.  
  14.                       ANSI-RM-01.v23 - Draft Chapter
  15.  
  16.                               1  Introduction
  17.                                 version 23
  18.  
  19.                                  83-02-11
  20.  
  21. This version has addressed comments up to #5795
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  
  71.  
  72.  
  73.  
  74.  
  75.  
  76.  
  77.                               1. Introduction
  78.  
  79.  
  80.  
  81. Ada  is  a  programming  language  designed in accordance with requirements
  82. defined by the United States Department of Defense:  the so-called Steelman
  83. requirements.   Overall,  these  requirements  call  for  a  language  with
  84. considerable  expressive  power  covering  a wide application domain.  As a
  85. result, the language includes facilities  offered  by  classical  languages
  86. such  as  Pascal  as  well  as  facilities  often found only in specialized
  87. languages.  Thus the language is a modern  algorithmic  language  with  the
  88. usual  control  structures,  and  with  the  ability  to  define  types and
  89. subprograms.  It also serves the need for modularity, whereby data,  types,
  90. and  subprograms  can  be  packaged.   It treats modularity in the physical
  91. sense as well, with a facility to support separate compilation.
  92.  
  93. In addition to these aspects, the language  covers  real-time  programming,
  94. with  facilities to model parallel tasks and to handle exceptions.  It also
  95. covers  systems  programming;   this  requires  precise  control  over  the
  96. representation of data and access to system-dependent properties.  Finally,
  97. both application-level and machine-level input-output are defined.
  98.  
  99.  
  100.  
  101. 1.1  Scope of the Standard
  102.  
  103.  
  104. This  standard  specifies  the form and meaning of program units written in
  105. Ada.  Its purpose is to promote  the  portability  of  Ada  programs  to  a
  106. variety of data processing systems.
  107.  
  108.  
  109.  
  110. 1.1.1  Extent of the Standard
  111.  
  112.  
  113. This standard specifies:
  114.  
  115. (a)  The form of a program unit written in Ada.
  116.  
  117. (b)  The effect of translating and executing such a program unit.
  118.  
  119. (c)  The manner in  which  program  units  may  be  combined  to  form  Ada
  120.      programs.
  121.  
  122. (d)  The predefined program units that  a  conforming  implementation  must
  123.      supply.
  124.  
  125. (e)  The permissible variations within the  standard,  and  the  manner  in
  126.      which they must be specified.
  127.  
  128.  
  129.                                    1 - 1
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136.  
  137.  
  138. (f)  Those violations of the standard that a conforming  implementation  is
  139.      required  to  detect,  and  the  effect  of attempting to translate or
  140.      execute a program unit containing such violations.
  141.  
  142. (g)  Those violations of the standard that a conforming  implementation  is
  143.      not required to detect.
  144.  
  145.  
  146.  
  147.  
  148.  
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195.                                    1 - 2
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.  
  203.  
  204. This standard does not specify:
  205.  
  206. (h)  The means whereby a program unit written in Ada  is  transformed  into
  207.      object code executable by a processor.
  208.  
  209. (i)  The means whereby translation or execution of program units is invoked
  210.      and the executing units are controlled.
  211.  
  212. (j)  The size or speed of the object code, or the relative execution  speed
  213.      of different language constructs.
  214.  
  215. (k)  The form or contents of any listings produced by implementations;   in
  216.      particular, the form or contents of error or warning messages.
  217.  
  218. (l)  The effect of executing a program unit  that  contains  any  violation
  219.      that a conforming implementation is not required to detect.
  220.  
  221. (m)  The size of a program or program unit that will exceed the capacity of
  222.      a particular conforming implementation.
  223.  
  224. Where  this  standard  specifies  that a program unit written in Ada has an
  225. exact effect, this effect is the operational meaning of  the  program  unit
  226. and  must  be  produced  by  all  conforming  implementations.   Where this
  227. standard specifies permissible variations in the effects of constituents of
  228. a program unit written in Ada, the operational meaning of the program  unit
  229. as  a  whole  is understood to be the range of possible effects that result
  230. from all these variations, and a conforming implementation  is  allowed  to
  231. produce  any of these possible effects.  Examples of permissible variations
  232. are:
  233.  
  234.   -  The represented values of fixed or floating  numeric  quantities,  and
  235.      the results of operations upon them.
  236.  
  237.   -  The order of execution of statements in different parallel  tasks,  in
  238.      the absence of explicit synchronization.
  239.  
  240.  
  241.  
  242. 1.1.2  Conformity of an Implementation With the Standard
  243.  
  244.  
  245. A conforming implementation is one that:
  246.  
  247. (a)  Correctly translates and executes legal program units written in  Ada,
  248.      provided  that  they are not so large as to exceed the capacity of the
  249.      implementation.
  250.  
  251. (b)  Rejects all program units that are so large as to exceed the  capacity
  252.      of the implementation.
  253.  
  254. (c)  Rejects all program units  that  contain  errors  whose  detection  is
  255.      required by the standard.
  256.  
  257. (d)  Supplies all predefined program units required by the standard.
  258.  
  259.  
  260.  
  261.                                    1 - 3
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268.  
  269.  
  270. (e)  Contains no variations except where the standard permits.
  271.  
  272. (f)  Specifies all such permitted variations in the  manner  prescribed  by
  273.      the standard.
  274.  
  275.  
  276.  
  277.  
  278.  
  279.  
  280.  
  281.  
  282.  
  283.  
  284.  
  285.  
  286.  
  287.  
  288.  
  289.  
  290.  
  291.  
  292.  
  293.  
  294.  
  295.  
  296.  
  297.  
  298.  
  299.  
  300.  
  301.  
  302.  
  303.  
  304.  
  305.  
  306.  
  307.  
  308.  
  309.  
  310.  
  311.  
  312.  
  313.  
  314.  
  315.  
  316.  
  317.  
  318.  
  319.  
  320.  
  321.  
  322.  
  323.  
  324.  
  325.  
  326.  
  327.                                    1 - 4
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334.  
  335.  
  336. 1.2  Structure of the Standard
  337.  
  338.  
  339. This  reference  manual  contains  fourteen  chapters, three annexes, three
  340. appendices, and an index.
  341.  
  342. Each chapter is divided into sections that have a common  structure.   Each
  343. section  introduces  its  subject,  gives  any  necessary syntax rules, and
  344. describes the semantics of the corresponding language constructs.  Examples
  345. and notes, and then references, may appear at the end of a section.
  346.  
  347. Examples are meant to illustrate  the  possible  forms  of  the  constructs
  348. described.   Notes  are  meant  to  emphasize  consequences  of  the  rules
  349. described in the section or elsewhere.  References are meant to attract the
  350. attention of readers to a term or phrase having a technical meaning defined
  351. in another section.
  352.  
  353. The standard definition of the Ada programming  language  consists  of  the
  354. fourteen   chapters  and  the  three  annexes,  subject  to  the  following
  355. restriction:   the  material  in  each  of  the  items  listed   below   is
  356. informative, and not part of the standard definition of the Ada programming
  357. language:
  358.  
  359.   -  Section 1.3 Design goals and sources
  360.  
  361.   -  Section 1.4 Language summary
  362.  
  363.   -  The examples, notes, and references given at the end of each section
  364.  
  365.   -  Each section whose title starts with the word "Example" or  "Examples"
  366.  
  367.  
  368.  
  369. 1.3  Design Goals and Sources
  370.  
  371.  
  372. Ada  was  designed with three overriding concerns:  program reliability and
  373. maintenance, programming as a human activity, and efficiency.
  374.  
  375. The need for languages that promote reliability and simplify maintenance is
  376. well established.  Hence emphasis was placed on  program  readability  over
  377. ease  of  writing.   For  example,  the  rules of the language require that
  378. program variables be explicitly declared and that their type be  specified.
  379. Since  the  type  of  a  variable  is  invariant, compilers can ensure that
  380. operations on variables are compatible with  the  properties  intended  for
  381. objects of the type.  Furthermore, error-prone notations have been avoided,
  382. and  the syntax of the language avoids the use of encoded forms in favor of
  383. more English-like constructs.  Finally, the  language  offers  support  for
  384. separate  compilation  of  program  units in a way that facilitates program
  385. development and maintenance, and which provides the same degree of checking
  386. between units as within a unit.
  387.  
  388. Concern for the human programmer  was  also  stressed  during  the  design.
  389. Above  all,  an attempt was made to keep the language as small as possible,
  390. given the ambitious nature of the application domain.  We have attempted to
  391.  
  392.  
  393.                                    1 - 5
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400.  
  401.  
  402. cover this domain with a small number of underlying concepts integrated  in
  403. a  consistent  and systematic way.  Nevertheless we have tried to avoid the
  404. pitfalls of excessive involution, and in the constant  search  for  simpler
  405. designs  we  have  tried  to  provide  language  constructs that correspond
  406. intuitively to what the users will normally expect.
  407.  
  408. Like many other human activities, the development of programs  is  becoming
  409. ever  more  decentralized  and  distributed.   Consequently, the ability to
  410. assemble a program from independently produced software components has been
  411. a central idea in this design.  The concepts of packages, of private types,
  412. and of  generic  units  are  directly  related  to  this  idea,  which  has
  413. ramifications in many other aspects of the language.
  414.  
  415.  
  416.  
  417.  
  418.  
  419.  
  420.  
  421.  
  422.  
  423.  
  424.  
  425.  
  426.  
  427.  
  428.  
  429.  
  430.  
  431.  
  432.  
  433.  
  434.  
  435.  
  436.  
  437.  
  438.  
  439.  
  440.  
  441.  
  442.  
  443.  
  444.  
  445.  
  446.  
  447.  
  448.  
  449.  
  450.  
  451.  
  452.  
  453.  
  454.  
  455.  
  456.  
  457.  
  458.  
  459.                                    1 - 6
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  
  466.  
  467.  
  468. No  language  can  avoid the problem of efficiency.  Languages that require
  469. over-elaborate compilers, or that lead to the inefficient use of storage or
  470. execution time, force these inefficiencies  on  all  machines  and  on  all
  471. programs.   Every  construct  of  the language was examined in the light of
  472. present  implementation   techniques.    Any   proposed   construct   whose
  473. implementation was unclear or that required excessive machine resources was
  474. rejected.
  475.  
  476. None of the above design goals was considered as achievable after the fact.
  477. The design goals drove the entire design process from the beginning.
  478.  
  479. A  perpetual  difficulty  in language design is that one must both identify
  480. the capabilities required by the application  domain  and  design  language
  481. features  that  provide these capabilities.  The difficulty existed in this
  482. design, although to a lesser degree than  usual  because  of  the  Steelman
  483. requirements.   These  requirements  often simplified the design process by
  484. allowing it to concentrate on the design of a given system providing a well
  485. defined  set  of  capabilities,  rather  than  on  the  definition  of  the
  486. capabilities themselves.
  487.  
  488. Another significant simplification of the design work resulted from earlier
  489. experience acquired by several successful Pascal derivatives developed with
  490. similar goals.  These are the languages Euclid, Lis, Mesa, Modula, and Sue.
  491. Many of the key ideas and syntactic forms developed in these languages have
  492. counterparts  in  Ada.   Several  existing  languages  such as Algol 68 and
  493. Simula, and also  recent  research  languages  such  as  Alphard  and  Clu,
  494. influenced  this  language in several respects, although to a lesser degree
  495. than did the Pascal family.
  496.  
  497. Finally, the evaluation reports received on  an  earlier  formulation  (the
  498. Green  language),  and  on alternative proposals (the Red, Blue, and Yellow
  499. languages), the language reviews that took place  at  different  stages  of
  500. this project, and the thousands of comments received from fifteen different
  501. countries  during  the  preliminary stages of the Ada design and during the
  502. ANSI canvass, all had a significant impact on the  standard  definition  of
  503. the language.
  504.  
  505.  
  506.  
  507. 1.4  Language Summary
  508.  
  509.  
  510. An  Ada  program  is  composed of one or more program units.  These program
  511. units can be compiled separately.  Program units may be subprograms  (which
  512. define  executable  algorithms), package units (which define collections of
  513. entities), task units (which  define  parallel  computations),  or  generic
  514. units  (which  define  parameterized  forms  of  packages and subprograms).
  515. Each unit normally consists of two parts:  a specification, containing  the
  516. information that must be visible to other units, and a body, containing the
  517. implementation details, which need not be visible to other units.
  518.  
  519. This  distinction of the specification and body, and the ability to compile
  520. units separately, allows a program to be designed, written, and tested as a
  521. set of largely independent software components.
  522.  
  523.  
  524.  
  525.                                    1 - 7
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  
  532.  
  533.  
  534. An Ada program will normally make use of a  library  of  program  units  of
  535. general   utility.    The   language   provides  means  whereby  individual
  536. organizations can construct their own libraries.  The text of a  separately
  537. compiled program unit must name the library units it requires.
  538.  
  539. Program Units
  540.  
  541. A  subprogram is the basic unit for expressing an algorithm.  There are two
  542. kinds of subprograms:  procedures and functions.  A procedure is the  means
  543. of  invoking  a  series  of actions.  For example, it may read data, update
  544. variables, or produce some output.  It may have parameters,  to  provide  a
  545. controlled means of passing information between the procedure and the point
  546. of call.
  547.  
  548.  
  549.  
  550.  
  551.  
  552.  
  553.  
  554.  
  555.  
  556.  
  557.  
  558.  
  559.  
  560.  
  561.  
  562.  
  563.  
  564.  
  565.  
  566.  
  567.  
  568.  
  569.  
  570.  
  571.  
  572.  
  573.  
  574.  
  575.  
  576.  
  577.  
  578.  
  579.  
  580.  
  581.  
  582.  
  583.  
  584.  
  585.  
  586.  
  587.  
  588.  
  589.  
  590.  
  591.                                    1 - 8
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598.  
  599.  
  600. A  function  is  the  means  of invoking the computation of a value.  It is
  601. similar to a procedure, but in addition will return a result.
  602.  
  603. A package is the basic unit for defining a collection of logically  related
  604. entities.   For  example,  a package can be used to define a common pool of
  605. data and types, a collection of related  subprograms,  or  a  set  of  type
  606. declarations  and  associated  operations.   Portions  of  a package can be
  607. hidden from the user, thus allowing access only to the  logical  properties
  608. expressed by the package specification.
  609.  
  610. A task unit is the basic unit for defining a task whose sequence of actions
  611. may  be  executed in parallel with those of other tasks.  Such tasks may be
  612. implemented  on  multicomputers,  multiprocessors,  or   with   interleaved
  613. execution  on  a  single processor.  A task unit may define either a single
  614. executing task or a task type permitting the  creation  of  any  number  of
  615. similar tasks.
  616.  
  617. Declarations and Statements
  618.  
  619. The  body  of  a  program unit generally contains two parts:  a declarative
  620. part, which defines the logical entities to be used in  the  program  unit,
  621. and  a  sequence  of statements, which defines the execution of the program
  622. unit.
  623.  
  624. The declarative part associates names with declared entities.  For example,
  625. a name may denote a type, a constant,  a  variable,  or  an  exception.   A
  626. declarative  part  also introduces the names and parameters of other nested
  627. subprograms, packages, task units, and generic units  to  be  used  in  the
  628. program unit.
  629.  
  630. The  sequence  of statements describes a sequence of actions that are to be
  631. performed.  The statements are executed  in  succession  (unless  an  exit,
  632. return, or goto statement, or the raising of an exception, causes execution
  633. to continue from another place).
  634.  
  635. An  assignment statement changes the value of a variable.  A procedure call
  636. invokes execution of a procedure after associating  any  actual  parameters
  637. provided at the call with the corresponding formal parameters.
  638.  
  639. Case  statements  and  if  statements  allow  the  selection of an enclosed
  640. sequence of statements based on the value of an expression or on the  value
  641. of a condition.
  642.  
  643. The  loop statement provides the basic iterative mechanism in the language.
  644. A loop statement specifies that a sequence of statements is to be  executed
  645. repeatedly  as  directed by an iteration scheme, or until an exit statement
  646. is encountered.
  647.  
  648. A block statement comprises  a  sequence  of  statements  preceded  by  the
  649. declaration of local entities used by the statements.
  650.  
  651. Certain  statements are only applicable to tasks.  A delay statement delays
  652. the execution of a task for a specified duration.  An entry call  statement
  653. is  written  as  a  procedure  call  statement;  it specifies that the task
  654. issuing the call is ready for a rendezvous with another task that has  this
  655.  
  656.  
  657.                                    1 - 9
  658.  
  659.  
  660.  
  661.  
  662.  
  663.  
  664.  
  665.  
  666. entry.   The  called  task  is  ready  to  accept  the  entry call when its
  667. execution reaches a corresponding accept  statement,  which  specifies  the
  668. actions then to be performed.  After completion of the rendezvous, both the
  669. calling  task and the task having the entry may continue their execution in
  670. parallel.  One form of the select statement allows a selective wait for one
  671. of several alternative rendezvous.  Other forms  of  the  select  statement
  672. allow conditional or timed entry calls.
  673.  
  674.  
  675.  
  676.  
  677.  
  678.  
  679.  
  680.  
  681.  
  682.  
  683.  
  684.  
  685.  
  686.  
  687.  
  688.  
  689.  
  690.  
  691.  
  692.  
  693.  
  694.  
  695.  
  696.  
  697.  
  698.  
  699.  
  700.  
  701.  
  702.  
  703.  
  704.  
  705.  
  706.  
  707.  
  708.  
  709.  
  710.  
  711.  
  712.  
  713.  
  714.  
  715.  
  716.  
  717.  
  718.  
  719.  
  720.  
  721.  
  722.  
  723.                                   1 - 10
  724.  
  725.  
  726.  
  727.  
  728.  
  729.  
  730.  
  731.  
  732. Execution  of a program unit may encounter error situations in which normal
  733. program execution cannot continue.  For example, an arithmetic  computation
  734. may exceed the maximum allowed value of a number, or an attempt may be made
  735. to  access  an  array component by using an incorrect index value.  To deal
  736. with such error situations,  the  statements  of  a  program  unit  can  be
  737. textually  followed  by  exception  handlers that specify the actions to be
  738. taken when the error situation arises.  Exceptions can be raised explicitly
  739. by a raise statement.
  740.  
  741. Data Types
  742.  
  743. Every object in the language has a  type,  which  characterizes  a  set  of
  744. values  and  a set of applicable operations.  The main classes of types are
  745. scalar types (comprising enumeration and numeric types),  composite  types,
  746. access types, and private types.
  747.  
  748. An  enumeration  type  defines  an  ordered  set  of  distinct  enumeration
  749. literals, for example a list of states or an alphabet of  characters.   The
  750. enumeration types BOOLEAN and CHARACTER are predefined.
  751.  
  752. Numeric  types provide a means of performing exact or approximate numerical
  753. computations.  Exact computations use integer types, which denote  sets  of
  754. consecutive  integers.   Approximate  computations  use  either fixed point
  755. types, with absolute bounds on the error, or  floating  point  types,  with
  756. relative  bounds  on  the  error.   The  numeric  types INTEGER, FLOAT, and
  757. DURATION are predefined.
  758.  
  759. Composite types  allow  definitions  of  structured  objects  with  related
  760. components.   The  composite  types  in the language provide for arrays and
  761. records.  An array is an object with indexed components of the  same  type.
  762. A  record  is  an object with named components of possibly different types.
  763. The array type STRING is predefined.
  764.  
  765. A record may have special  components  called  discriminants.   Alternative
  766. record structures that depend on the values of discriminants can be defined
  767. within a record type.
  768.  
  769. Access  types  allow  the construction of linked data structures created by
  770. the evaluation of allocators.  They allow several variables  of  an  access
  771. type  to  designate  the  same  object,  and  components  of  one object to
  772. designate the same or other objects.  Both the elements in  such  a  linked
  773. data  structure  and their relation to other elements can be altered during
  774. program execution.
  775.  
  776. Private types can be defined in a package that conceals structural  details
  777. that  are  externally  irrelevant.  Only the logically necessary properties
  778. (including any discriminants) are made visible to the users of such  types.
  779.  
  780. The  concept  of  a  type is refined by the concept of a subtype, whereby a
  781. user can constrain the set of allowed values of a type.   Subtypes  can  be
  782. used  to  define  subranges  of  scalar types, arrays with a limited set of
  783. index values, and records and private types  with  particular  discriminant
  784. values.
  785.  
  786.  
  787.  
  788.  
  789.                                   1 - 11
  790.  
  791.  
  792.  
  793.  
  794.  
  795.  
  796.  
  797.  
  798. Other Facilities
  799.  
  800. Representation clauses can be used to specify the mapping between types and
  801. features  of an underlying machine.  For example, the user can specify that
  802. objects of a given type must be represented with a given number of bits, or
  803. that the components of a record are to be represented using a given storage
  804. layout.  Other features allow the controlled use of low level, nonportable,
  805. or implementation-dependent aspects,  including  the  direct  insertion  of
  806. machine code.
  807.  
  808. Input-output  is  defined  in  the  language by means of predefined library
  809. packages.   Facilities  are  provided  for  input-output   of   values   of
  810. user-defined   as   well   as  of  predefined  types.   Standard  means  of
  811. representing values in display form are also provided.
  812.  
  813.  
  814.  
  815.  
  816.  
  817.  
  818.  
  819.  
  820.  
  821.  
  822.  
  823.  
  824.  
  825.  
  826.  
  827.  
  828.  
  829.  
  830.  
  831.  
  832.  
  833.  
  834.  
  835.  
  836.  
  837.  
  838.  
  839.  
  840.  
  841.  
  842.  
  843.  
  844.  
  845.  
  846.  
  847.  
  848.  
  849.  
  850.  
  851.  
  852.  
  853.  
  854.  
  855.                                   1 - 12
  856.  
  857.  
  858.  
  859.  
  860.  
  861.  
  862.  
  863.  
  864. Finally, the language provides a  powerful  means  of  parameterization  of
  865. program units, called generic program units.  The generic parameters can be
  866. types  and subprograms (as well as objects) and so allow general algorithms
  867. to be applied to all types of a given class.
  868.  
  869.  
  870.  
  871. 1.5  Method of Description and Syntax Notation
  872.  
  873.  
  874. The form of Ada program units is  described  by  means  of  a  context-free
  875. syntax  together with context-dependent requirements expressed by narrative
  876. rules.
  877.  
  878. The meaning of Ada program units is described by means of  narrative  rules
  879. defining  both  the effects of each construct and the composition rules for
  880. constructs.   This  narrative  employs  technical   terms   whose   precise
  881. definition  is  given in the text (references to the section containing the
  882. definition of a technical term appear at the end of each section that  uses
  883. the term).
  884.  
  885. All other terms are in the English language and bear their natural meaning,
  886. as  defined  in Webster's Third New International Dictionary of the English
  887. Language.
  888.  
  889.  
  890. The context-free syntax of the language is described using a simple variant
  891. of Backus-Naur-Form.  In particular,
  892.  
  893. (a)  Lower case words, some containing embedded  underlines,  are  used  to
  894.      denote syntactic categories, for example:
  895.  
  896.           adding_operator
  897.  
  898.  
  899.      Whenever the name of a syntactic  category  is  used  apart  from  the
  900.      syntax  rules  themselves,  spaces  take  the  place of the underlines
  901.      (thus:  adding operator).
  902.  
  903. (b)  Boldface words are used to denote reserved words, for example:
  904.  
  905.           array
  906.  
  907.  
  908. (c)  Square brackets enclose optional items.  Thus the two following  rules
  909.      are equivalent.
  910.  
  911.           return_statement ::= return [expression];
  912.           return_statement ::= return; | return expression;
  913.  
  914.  
  915. (d)  Braces enclose a repeated item.  The item  may  appear  zero  or  more
  916.      times;  the repetitions occur from left to right as with an equivalent
  917.      left-recursive rule.  Thus the two following rules are equivalent.
  918.  
  919.  
  920.  
  921.                                   1 - 13
  922.  
  923.  
  924.  
  925.  
  926.  
  927.  
  928.  
  929.  
  930.           term ::= factor {multiplying_operator factor}
  931.           term ::= factor | term multiplying_operator factor
  932.  
  933.  
  934.  
  935.  
  936.  
  937.  
  938.  
  939.  
  940.  
  941.  
  942.  
  943.  
  944.  
  945.  
  946.  
  947.  
  948.  
  949.  
  950.  
  951.  
  952.  
  953.  
  954.  
  955.  
  956.  
  957.  
  958.  
  959.  
  960.  
  961.  
  962.  
  963.  
  964.  
  965.  
  966.  
  967.  
  968.  
  969.  
  970.  
  971.  
  972.  
  973.  
  974.  
  975.  
  976.  
  977.  
  978.  
  979.  
  980.  
  981.  
  982.  
  983.  
  984.  
  985.  
  986.  
  987.                                   1 - 14
  988.  
  989.  
  990.  
  991.  
  992.  
  993.  
  994.  
  995.  
  996.  
  997. (e)  A  vertical  bar  separates  alternative  items   unless   it   occurs
  998.      immediately  after  an  opening  brace,  in  which  case it stands for
  999.      itself:
  1000.  
  1001.           letter_or_digit ::= letter | digit
  1002.           component_association ::= [choice {| choice} =>] expression
  1003.  
  1004.  
  1005. (f)  If the name of any syntactic category starts with an italicized  part,
  1006.      it  is  equivalent  to  the category name without the italicized part.
  1007.      The italicized part is intended to convey some  semantic  information.
  1008.      For example type_name and task_name are both equivalent to name alone.
  1009.  
  1010. Note:
  1011.  
  1012. The  syntax  rules describing structured constructs are presented in a form
  1013. that corresponds to the  recommended  paragraphing.   For  example,  an  if
  1014. statement is defined as
  1015.  
  1016.     if_statement ::=
  1017.         if condition then
  1018.           sequence_of_statements
  1019.        {elsif condition then
  1020.           sequence_of_statements}
  1021.        [else
  1022.           sequence_of_statements]
  1023.         end if;
  1024.  
  1025. Different  lines  are  used for parts of a syntax rule if the corresponding
  1026. parts of the construct  described  by  the  rule  are  intended  to  be  on
  1027. different   lines.   Indentation  in  the  rule  is  a  recommendation  for
  1028. indentation of the corresponding part of the construct.  It is  recommended
  1029. that  all  indentations be by multiples of a basic step of indentation (the
  1030. number of spaces for the basic step is not defined).  The preferred  places
  1031. for  other  line  breaks  are  after  semicolons.   On the other hand, if a
  1032. complete construct can fit on  one  line,  this  is  also  allowed  in  the
  1033. recommended paragraphing.
  1034.  
  1035.  
  1036.  
  1037. 1.6  Classification of Errors
  1038.  
  1039.  
  1040. The   language   definition   classifies   errors  into  several  different
  1041. categories:
  1042.  
  1043. (a)  Errors that  must  be  detected  at  compilation  time  by  every  Ada
  1044.      compiler.
  1045.  
  1046.      These  errors  correspond  to  any  violation  of a rule given in this
  1047.      reference manual, other than the violations that correspond to (b)  or
  1048.      (c)  below.   In particular, violation of any rule that uses the terms
  1049.      must, allowed, legal,  or  illegal  belongs  to  this  category.   Any
  1050.      program  that  contains  such an error is not a legal Ada program;  on
  1051.  
  1052.  
  1053.                                   1 - 15
  1054.  
  1055.  
  1056.  
  1057.  
  1058.  
  1059.  
  1060.  
  1061.  
  1062.      the other hand, the fact that a program is legal does  not  mean,  per
  1063.      se, that the program is free from other forms of error.
  1064.  
  1065. (b)  Errors that must be detected at run time by the execution  of  an  Ada
  1066.      program.
  1067.  
  1068.      The  corresponding  error  situations are associated with the names of
  1069.      the predefined exceptions.  Every Ada compiler is required to generate
  1070.      code  that  raises  the  corresponding  exception  if  such  an  error
  1071.      situation arises during program execution.  If an exception is certain
  1072.      to  be  raised  in  every  execution  of a program, then compilers are
  1073.      allowed (although not required) to report  this  fact  at  compilation
  1074.      time.
  1075.  
  1076.  
  1077.  
  1078.  
  1079.  
  1080.  
  1081.  
  1082.  
  1083.  
  1084.  
  1085.  
  1086.  
  1087.  
  1088.  
  1089.  
  1090.  
  1091.  
  1092.  
  1093.  
  1094.  
  1095.  
  1096.  
  1097.  
  1098.  
  1099.  
  1100.  
  1101.  
  1102.  
  1103.  
  1104.  
  1105.  
  1106.  
  1107.  
  1108.  
  1109.  
  1110.  
  1111.  
  1112.  
  1113.  
  1114.  
  1115.  
  1116.  
  1117.  
  1118.  
  1119.                                   1 - 16
  1120.  
  1121.  
  1122.  
  1123.  
  1124.  
  1125.  
  1126.  
  1127.  
  1128. (c)  Erroneous execution.
  1129.  
  1130.      The language rules specify certain rules to be obeyed by Ada programs,
  1131.      although  there is no requirement on Ada compilers to provide either a
  1132.      compilation-time or a run-time detection  of  the  violation  of  such
  1133.      rules.   The  errors  of this category are indicated by the use of the
  1134.      word  erroneous  to  qualify  the  execution  of   the   corresponding
  1135.      constructs.  The effect of erroneous execution is unpredictable.
  1136.  
  1137. (d)  Incorrect order dependences.
  1138.  
  1139.      Whenever  the  reference  manual  specifies  that different parts of a
  1140.      given construct are to be executed in some order that is  not  defined
  1141.      by  the  language,  this  means  that the implementation is allowed to
  1142.      execute these parts in any  given  order,  following  the  rules  that
  1143.      result  from  that given order, but not in parallel.  Furthermore, the
  1144.      construct is incorrect if execution of  these  parts  in  a  different
  1145.      order  would  have  a different effect.  Compilers are not required to
  1146.      provide either compilation-time or  run-time  detection  of  incorrect
  1147.      order dependences.  The foregoing is expressed in terms of the process
  1148.      that  is  called  execution;  it applies equally to the processes that
  1149.      are called evaluation and elaboration.
  1150.  
  1151. If a compiler is able to recognize at compilation time that a construct  is
  1152. erroneous  or  contains an incorrect order dependence, then the compiler is
  1153. allowed to generate, in place of  the  code  otherwise  generated  for  the
  1154. construct,   code  that  raises  the  predefined  exception  PROGRAM_ERROR.
  1155. Similarly, compilers are allowed to generate code that checks at  run  time
  1156. for  erroneous  constructs,  for  incorrect order dependences, or for both.
  1157. The predefined exception PROGRAM_ERROR is raised if such a check fails.
  1158.  
  1159.  
  1160.  
  1161.  
  1162.  
  1163.  
  1164.  
  1165.  
  1166.  
  1167.  
  1168.  
  1169.  
  1170.  
  1171.  
  1172.  
  1173.  
  1174.  
  1175.  
  1176.  
  1177.  
  1178.  
  1179.  
  1180.  
  1181.  
  1182.  
  1183.  
  1184.  
  1185.                                   1 - 17
  1186.  
  1187.  
  1188.  
  1189.  
  1190.